package com.demo.java.OD351_400.OD398;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【表演赛游戏分组(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146248532
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String[] input = scanner.nextLine().split(" ");
        int[] nums = Arrays.stream(input).mapToInt(Integer::parseInt).toArray();

        // 调用递归函数，计算最小差值
        int result = findMinDifference(nums, 0, 0, 0);
        System.out.println(result);
    }

    // 递归函数，nums表示选手的成绩，index表示当前处理的选手，selected表示已选中的选手数，sum表示当前队伍的总分
    private static int findMinDifference(int[] nums, int index, int selected, int sum) {
        // 递归基：如果已选5名选手，计算当前队伍与剩余队伍的分数差
        if (selected == 5) {
            int totalSum = Arrays.stream(nums).sum();
            return Math.abs(sum - (totalSum - sum)); // 计算差值并返回
        }

        // 如果已经处理完所有选手，返回一个很大的数，表示不合法的情况
        if (index == nums.length) {
            return Integer.MAX_VALUE;
        }

        // 选择当前选手加入当前队伍
        int includeCurrent = findMinDifference(nums, index + 1, selected + 1, sum + nums[index]);

        // 不选择当前选手
        int excludeCurrent = findMinDifference(nums, index + 1, selected, sum);

        // 返回最小的分数差
        return Math.min(includeCurrent, excludeCurrent);
    }
}